package com.betterjr.modules.contract;

import static com.betterjr.common.web.ControllerExceptionHandler.exec;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.dubbo.config.annotation.Reference;
import com.betterjr.common.web.Servlets;

/** 
 * @ClassName: ContractProtocoListController 
 * @Description: 列表清单
 * @author xuzx
 * @date 2017年10月26日 上午11:02:28 
 *  
 */
@Controller
@RequestMapping(value = "/Scf/ContractProtocol")
public class ContractProtocoListController {

    private static final Logger logger = LoggerFactory.getLogger(ContractProtocoListController.class);

    @Reference(interfaceClass = IContractProtocoListService.class)
    private IContractProtocoListService contractProtocoListService;

    /**
    * @Title: addContractProtocol 
    * @Description: 保存协议清单和签署方信息
    * @param request   对象参数
    * @param requestNo 业务编号 
    * @param customTemplateId 自定义上传文件id 
    * @param commonNo 签署方机构编号
    * @return 保存协议信息
    * @throws 
    * @author xuzx
    * @date 2017年11月3日 下午1:33:39
    */
    @RequestMapping(value = "/addContractProtocol", method = RequestMethod.POST)
    public @ResponseBody String addContractProtocol(final HttpServletRequest request, final String requestNo,
            final String customTemplateId, final String commonNo) {
        final Map<String, Object> anMap = Servlets.getParametersStartingWith(request, "");
        logger.info("保存协议清单,入参：" + anMap.toString());
        return exec(
                () -> contractProtocoListService.webSaveContractProtocol(anMap, requestNo, customTemplateId, commonNo),
                "保存协议失败", logger);
    }

    /**
     * @Title: queryElectronicContract 
     * @Description: 查询下拉的电子合同模板
     * @param request 对象参数
     * @param custNo 保理机构编号
     * @return  查询电子合同模板名称
     * @throws 
     * @author xuzx
     * @date 2017年11月3日 下午1:34:47
     */
    @RequestMapping(value = "/queryElectronicContract", method = RequestMethod.POST)
    public @ResponseBody String queryElectronicContract(final HttpServletRequest request, final Long custNo) {
        final Map<String, Object> param = Servlets.getParametersStartingWith(request, "");
        logger.info("查询电子合同模板,入参：" + param.toString());
        return exec(() -> contractProtocoListService.webQueryElectronicContract(param, custNo), "查询电子合同模板列表出错！",
                logger);
    }

    /**
     * @Title: queryContractProtocol 
     * @Description: 查询协议清单列表
     * @param request 对象参数
     * @param requestNo 业务单号
     * @param flag   是否统计总数
     * @param pageNum  页码   
     * @param pageSize 页面大小
     * @return 查询列表清单列表
     * @throws 
     * @author xuzx
     * @date 2017年11月3日 下午1:36:11
     */
    @RequestMapping(value = "/queryContractProtocol", method = RequestMethod.POST)
    public @ResponseBody String queryContractProtocol(final HttpServletRequest request, final String requestNo,
            final int flag, final int pageNum, final int pageSize) {
        final Map<String, Object> anMap = Servlets.getParametersStartingWith(request, "");
        logger.info("分页查询协议清单,入参：" + anMap.toString());
        return exec(
                () -> contractProtocoListService.webQueryContractProtocol(anMap, requestNo, pageNum, pageSize, flag),
                "分页查询协议清单出错", logger);
    }

    /**
     * @Title: deleteContractProtocol 
     * @Description: 删除协议清单和签署方法信息
     * @param id    协议清单id
     * @return 删除协议清单
     * @throws 
     * @author xuzx
     * @date 2017年11月3日 下午1:37:23
     */
    @RequestMapping(value = "/deleteContractProtocol", method = RequestMethod.POST)
    public @ResponseBody String deleteContractProtocol(final Long id) {
        logger.info("删除协议清单及关联的签署方法信息,入参：" + id);
        return exec(() -> contractProtocoListService.webDelContractProtocol(id), "删除协议失败", logger);
    }

    /**
     * @Title: updateContractProtocol 
     * @Description: 编辑协议清单
     * @param request 对象参数
     * @param id   协议清单编号
     * @param customTemplateId  上传文件编号
     * @param commonNo  机构编号
     * @return 编辑清单
     * @throws 
     * @author xuzx
     * @date 2017年11月3日 下午1:38:08
     */
    @RequestMapping(value = "/updateContractProtocol", method = RequestMethod.POST)
    public @ResponseBody String updateContractProtocol(final HttpServletRequest request, final Long id,
            final String customTemplateId, final String commonNo) {
        final Map<String, Object> param = Servlets.getParametersStartingWith(request, "");
        logger.info("更新协议清单,入参：" + id, param.toString());
        return exec(() -> contractProtocoListService.webUpdateContractProtocol(param, id, customTemplateId, commonNo),
                "更新协议失败", logger);
    }

    /**
     * @Title: queryInformation 
     * @Description: 查询机构信息
     * @param commonNo  机构编号
     * @return 查询机构信息
     * @throws 
     * @author xuzx
     * @date 2017年11月3日 下午1:39:16
     */
    @RequestMapping(value = "/queryInformation", method = RequestMethod.POST)
    public @ResponseBody String queryInformation(final Long commonNo) {
        logger.info("查询机构信息,入参：" + commonNo);
        return exec(() -> contractProtocoListService.webqueryInformation(commonNo), "查询机构失败", logger);
    }

    /**
     * @Title: queryOnlyContractSignatory 
     * @Description: 查询清单详情
     * @param id  清单编号
     * @return 查询协议清单详情
     * @throws 
     * @author xuzx
     * @date 2017年11月3日 下午1:40:05
     */
    @RequestMapping(value = "/queryOnlyContractSignatory", method = RequestMethod.POST)
    public @ResponseBody String queryOnlyContractSignatory(final Long id) {
        logger.info("查询协议清单详细信息,入参：" + id);
        return exec(() -> contractProtocoListService.webContractProtocoListService(id), "查询协议清单详细信息失败", logger);
    }

    /**
     * 
     * @Title: queryIntoPictures 
     * @Description: 图片转PDF
     * @param contractProtocoId
     * @return TODO(说明)
     * @throws 
     * @author xuzx
     * @date 2017年11月1日 下午4:00:36
     */
    @RequestMapping(value = "/queryIntoPictures", method = RequestMethod.POST)
    public @ResponseBody String queryIntoPictures(final Long contractProtocoId) {
        logger.info("查询PDF略缩图失败,入参：" + contractProtocoId);
        return exec(() -> contractProtocoListService.webQueryIntoPictures(contractProtocoId), "查询PDF略缩图失败", logger);
    }

    /**
     * 
     * @Title: saveSignatureLocation 
     * @Description:插入签章位置
     * @param request   签章对象
     * @param contractProtocoId 协议清单编号
     * @return 插入签章位置
     * @throws 
     * @author xuzx
     * @date 2017年11月6日 上午8:38:00
     */
    @RequestMapping(value = "/saveSignatureLocation", method = RequestMethod.POST)
    public @ResponseBody String saveSignatureLocation(final HttpServletRequest request, final Long contractProtocoId) {
        final Map<String, String[]> paramMap = request.getParameterMap();
        // paramMap析成普通的map
        final Map returnMap = new HashMap(16);
        final Iterator entries = paramMap.entrySet().iterator();
        Map.Entry entry;
        String name = "";
        String value = "";
        while (entries.hasNext()) {
            entry = (Map.Entry) entries.next();
            name = (String) entry.getKey();
            final Object valueObj = entry.getValue();
            if (null == valueObj) {
                value = "";
            } else if (valueObj instanceof String[]) {
                final String[] values = (String[]) valueObj;
                for (int i = 0; i < values.length; i++) {
                    value = values[i] + ",";
                }
                value = value.substring(0, value.length() - 1);
            } else {
                value = valueObj.toString();
            }
            returnMap.put(name, value);
        }
        logger.info("插入签章位置失败,入参：" + paramMap.toString());
        return exec(() -> contractProtocoListService.webSaveSignatureLocations(returnMap, contractProtocoId),
                "插入签章位置失败", logger);

    }

    /**
     * 
     * @Title: queryContractSignatory 
     * @Description: 查看签章位置 
     * @param id     协议清单编号
     * @return 查看签章位置
     * @throws 
     * @author xuzx
     * @date 2017年11月6日 上午8:37:09
     */
    @RequestMapping(value = "/queryContractSignatory", method = RequestMethod.POST)
    public @ResponseBody String queryContractSignatory(final Long id) {
        logger.info("查询协议清单签章,入参：" + id);
        return exec(() -> contractProtocoListService.webQuerySignatureLocations(id), "查询协议清单签章位置失败", logger);
    }

    /**
     * 
     * @Title: queryAssociatedInformation 
     * @Description: 查看协议清单关联的签署方信息，签章信息 
     * @param id    协议清单编号
     * @return 查看协议清单关联的签署方信息，签章信息 
     * @throws 
     * @author xuzx
     * @date 2017年11月7日 上午11:59:27
     */
    @RequestMapping(value = "/queryAssociatedInformation", method = RequestMethod.POST)
    public @ResponseBody String queryAssociatedInformation(final Long id) {
        logger.info("查询协议清单关联信息,入参：" + id);
        return exec(() -> contractProtocoListService.webQueryAssociatedInformation(id), "查询协议清单关联信息", logger);
    }
}
